package repository;

import java.io.Serializable;

/**
 * Сериализуемый массив байт
 * @author Алексей ID=2001
 */
public class ByteArray implements Serializable {
    /** счетчик для записи и чтения*/
    private int counter=0;
    /** массив байт */
    private byte array[];
    /**
     * конструктор
     * @param size размер массива
     */
    public ByteArray(int size){
        array=new byte[size];
    }
    /**
     * Записать очередной байт
     * @param b байт
     * @return true в случае успеха, false - выход за массив
     */
    public boolean write(byte b){
        if (counter>=array.length) return false;
        array[counter++]=b;
        return true;
    }
    /**
     * Прочесть очередной байт
     * @return байт, 0 в сучае выхода за массив
     */
    public byte read(){
        if (counter>=array.length) return 0;
        return array[counter++];
    }
    /**
     * Сброс счетчика для записи и чтения
     */
    public void chopCounter(){counter=0;}
    /**
     * Запросить байт по индексу
     * @param i индекс байта
     * @return байт
     */
    public byte get(int i){return array[i];}
    /**
     * Установить байт по индексу
     * @param i индекс байта
     * @param b байт
     */
    public void set(int i,byte b){array[i]=b;}
    /**
     * Запросить размер массива
     * @return размер
     */
    public int size(){return array.length;}
    /**
     * Запросить индекс счетчика
     * @return индекс счетчика
     */
    public int getCounter(){return counter;}
    /**
     * Установить счетчик
     * @param i индекс счетчика
     */
    public void setCounter(int i){counter=i;}
    /**
     * Запросить состояния счетчика
     * @return true если счетчик в массиве,иначе false
     */
    public boolean isCounter(){
        if (counter>=array.length) return false;
        return true;
    }
    /**
     * Запросить массив байт
     * @return
     */
    public byte[] getAll(){return array;}
    /**
     * Переписать массив байт. Изменяется размер массива. Сбрасывается счетчик.
     * @param b массив байт
     */
    public void setAll(byte[] b){
        array=new byte[b.length];
        for(int i=0;i<array.length;i++)
            array[i]=b[i];
        counter=0;
    }
}
